package com.view;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import com.model.Tarifario;
import com.type.TipoTarifarioEnum;
import com.validators.DateRange;

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
@DateRange(entity = Tarifario.class, start = "fechaDesde", end = "fechaHasta", objetoInterno="proveedor", daoName = "tarifarioDAO", tipo = "tipoTarifario", message = "El rango de fechas ingresado es inválido o bien el mismo se solapa con otro en el sistema ")
public class TarifarioView extends BaseView {

	private TipoTarifarioEnum tipoTarifario;

	@NotNull(message = "De completar la fecha desde")
	private Date fechaDesde;

	@NotNull(message = "De completar la fecha hasta")
	private Date fechaHasta;

	private ProveedorView proveedor;

	@Valid
	@Size(min = 1, message = "Debe ingresar al menos un producto")
	private List<ProductoPrecioView> listaProductoPrecio;

	public TarifarioView(Long id, TipoTarifarioEnum tipoTarifario,
			Date fechaDesde, Date fechaHasta, ProveedorView proveedor,
			List<ProductoPrecioView> listaProductoPrecio) {
		super();
		this.id = id;
		this.tipoTarifario = tipoTarifario;
		this.fechaDesde = fechaDesde;
		this.fechaHasta = fechaHasta;
		this.proveedor = proveedor;
		this.listaProductoPrecio = listaProductoPrecio;
	}

	public TarifarioView() {
		this(null, TipoTarifarioEnum.CLIENTE, new Date(), new Date(), null,
				new ArrayList<ProductoPrecioView>());
	}

	public TipoTarifarioEnum getTipoTarifario() {
		return tipoTarifario;
	}

	public void setTipoTarifario(TipoTarifarioEnum tipoTarifario) {
		this.tipoTarifario = tipoTarifario;
	}

	public Date getFechaDesde() {
		return fechaDesde;
	}

	public void setFechaDesde(Date fechaDesde) {
		this.fechaDesde = fechaDesde;
	}

	public Date getFechaHasta() {
		return fechaHasta;
	}

	public void setFechaHasta(Date fechaHasta) {
		this.fechaHasta = fechaHasta;
	}

	public ProveedorView getProveedor() {
		return proveedor;
	}

	public void setProveedor(ProveedorView proveedor) {
		this.proveedor = proveedor;
	}

	public List<ProductoPrecioView> getListaProductoPrecio() {
		return listaProductoPrecio;
	}

	public void setListaProductoPrecio(
			List<ProductoPrecioView> listaProductoPrecio) {
		this.listaProductoPrecio = listaProductoPrecio;
	}

}
